#include "my_task.h"


/**************************** 任务句柄 ********************************/
/* 
 * 任务句柄是一个指针，用于指向一个任务，当任务创建好之后，它就具有了一个任务句柄
 * 以后我们要想操作这个任务都需要通过这个任务句柄，如果是自身的任务操作自己，那么
 * 这个句柄可以为NULL。
 */
 /* 创建任务句柄 */
TaskHandle_t AppTaskCreate_Handle = NULL;
/* LED任务句柄 */
TaskHandle_t LED_Task_Handle = NULL;

TaskHandle_t LED_KEY_Task1_Handle = NULL;
TaskHandle_t LED_KEY_Task2_Handle = NULL;


void AppTaskCreate(void* para)
{
  BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值，默认为pdPASS */
  
  taskENTER_CRITICAL();           //进入临界区
  
  /* 创建LED_Task任务 */
  // xReturn = xTaskCreate((TaskFunction_t )LED_Task, /* 任务入口函数 */
  //                       (const char*    )"LED_Task",/* 任务名字 */
  //                       (uint16_t       )512,   /* 任务栈大小 */
  //                       (void*          )NULL,	/* 任务入口函数参数 */
  //                       (UBaseType_t    )2,	    /* 任务的优先级 */
  //                       (TaskHandle_t*  )&LED_Task_Handle);/* 任务控制块指针 */
  // if(pdPASS == xReturn)
  //   printf("创建LED_Task任务成功!\r\n");

  xReturn = xTaskCreate((TaskFunction_t)LED_KEY_Task1,
                        (const char*   )"LED_KEY_Task1",
                        (uint16_t      )512,
                        (void*         )NULL,
                        (UBaseType_t   )3,
                        (TaskHandle_t* )&LED_KEY_Task1_Handle);
  if (pdPASS == xReturn)
    printf("创建LED_KEY_Task1任务成功！\r\n");
  
  vTaskDelete(AppTaskCreate_Handle); //删除AppTaskCreate任务
  
  taskEXIT_CRITICAL();            //退出临界区
}




/**********************************************************************
  * @ 函数名  ： LED_Task
  * @ 功能说明： LED_Task任务主体
  * @ 参数    ：   
  * @ 返回值  ： 无
  ********************************************************************/
void LED_Task(void* para)
{	
    printf("进入LED_Task任务!\r\n");
    while (1)
    {
        LED1_ON;
        vTaskDelay(500);   /* 延时500个tick */
        printf("LED_Task Running,LED1_ON\r\n");
        
        LED1_OFF;     
        vTaskDelay(500);   /* 延时500个tick */		 		
        printf("LED_Task Running,LED1_OFF\r\n");
    }
}

void LED_KEY_Task1(void* para) 
{
  static int LedFlag = 1;
  printf("进入LED_KEY_Test1任务\r\n");
  
  while(1) 
  {
    
    if (Key_Scan(KEY1_GPIO_PORT, KEY1_GPIO_PIN) == KEY_ON && LedFlag == 1)
    {
      LED1_ON;
      LedFlag = 0;
      printf("flag:1 --> flag:%d\r\n", LedFlag);
      printf("LED_KEY_Task1 Running, LED1_ON\r\n");
    }
    if (Key_Scan(KEY1_GPIO_PORT, KEY1_GPIO_PIN) == KEY_ON && LedFlag == 0)
    {
      LED1_OFF;
      LedFlag = 1;
      printf("flag:0 --> flag:%d\r\n", LedFlag);
      printf("LED_KEY_Task1 Running, LED1_OFF\r\n");
    } 
  }
}




